﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace Lcsoft.TemplateEngine.XHtmlParser
{
	/// <summary>
	/// 表示 SSI 标签。
	/// </summary>
	[ComVisible(true)]
	[Serializable]
	public sealed class XHtmlSSIElement : XHtmlComment
	{
		/// <summary>
		/// 初始化 <see cref="XHtmlSSIElement"/> 类的新实例。
		/// </summary>
		/// <param name="initialPath"><see cref="XHtmlSSIElement"/> 的初始路径。</param>
		/// <param name="fileName"><see cref="XHtmlSSIElement"/> 引用的文件名。</param>
		/// <param name="line"><see cref="XHtmlSSIElement"/> 所在的行数。</param>
		/// <param name="column"><see cref="XHtmlSSIElement"/> 所在的列数。</param>
		public XHtmlSSIElement(string initialPath, string fileName, int line, int column) : base(String.Format(@"<!--#include file=""{0}"" -->", fileName), line, column)
		{
			if (initialPath == null) throw new ArgumentNullException("initialPath");
			if (initialPath.Length == 0) throw new ArgumentOutOfRangeException("initialPath");
			if (Path.IsPathRooted(initialPath) == false) throw new ArgumentException("参数 applicationPath 必须是绝对路径。", "initialPath");
			if (Directory.Exists(initialPath) == false) throw new DirectoryNotFoundException(String.Format(@"无法找到指定路径：""{0}""。", initialPath));

			this.InitialPath = initialPath;
			this.FileName = fileName;

			this.FullName = Path.Combine(this.InitialPath, this.FileName);

			if (File.Exists(this.FullName) == false) throw new FileNotFoundException(String.Format(@"无法找到指定文件：""{0}""。", this.FullName));
		}

		/// <summary>
		/// 获取 <see cref="XHtmlSSIElement"/> 引用的文件名。
		/// </summary>
		public string FileName { get; private set; }

		/// <summary>
		/// 获取 <see cref="XHtmlSSIElement"/> 引用的文件的完整物理路径。
		/// </summary>
		public string FullName { get; private set; }

		/// <summary>
		/// 获取 <see cref="XHtmlSSIElement"/> 引用的文件的初始路径。
		/// </summary>
		public string InitialPath { get; private set; }
	}
}
